package com.bnz.cart;

import com.bnz.entity.CartItem;
import com.bnz.entity.Product;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 购物车类
 */
@Data// 添加git，set方法
public class Cart {
    // 引入map集合(k:int,v:CartItem==>购物车实体类)
    private Map<Integer, CartItem> map = new HashMap<>();

    // 1、将选择的商品加入购物车
    public void add(Product product) {
        // 1.1、判断map中是否有选中的商品，有，就修改其数量
        boolean b = map.containsKey(product.getPid());
        // 1.2、这里是存在
        if (b){
            // 1.3、得到选中的商品id
            CartItem cartItem = map.get(product.getPid());
            // 1.4、修改购物车里的数量(num)
            cartItem.setNum(cartItem.getNum() + 1);
            // 1.5、修改其中的小计（单价x数量）
            cartItem.setTotal(cartItem.getNum() * product.getPrice());
        }else {
            // 1.6、如果商品不存在，就添加(数量，价格(根据获取的信息拿)，servletd中获取到的商品信息)
            CartItem em = new CartItem(1, product.getPrice(), product);
            map.put(product.getPid(),em);// 获取到的商品编号为key
        }
        // 对库存进行修改(quantity:库存)
        product.setQuantity(product.getQuantity() -1);
    }

    // 2、移除选中的购物车商品(pid)
    public void remove(Integer pid) {
        // 2.1、先把库存恢复
        CartItem cartItem = map.get(pid);
        // 2.1.1、通过获取其中的商品实体类，拿到库存信息
        cartItem.getProduct().setQuantity(cartItem.getProduct().getQuantity() + cartItem.getNum());
        // 2.2、根据key来移除商品（k:pid）
        map.remove(pid);
    }

    // 3、删除购物车数据
    public void clearCart() {
        // 3.1、线回复库存（如果不先恢复就删除，会导致没有数据恢复库存）
        for (CartItem value : map.values()) {
            // 3.2、拿到购物车关联的物品
            Product product = value.getProduct();
            // 3.3、修改商品的库存量
            product.setQuantity(product.getQuantity() + value.getNum());
        }
        // 3.4、将购物车的map清空
        map.clear();
    }
}
